import { get, post } from "@/api/request";

/**
 * 视频监控控制器 / 视频监控控制器设备云台控制
 * @param {object} data
 * @param {string} [data.accessToken] access_token
 * @param {number} [data.channelNo] 通道号
 * @param {string} [data.deviceSerial] 设备序列号,存在英文字母的设备序列号，字母需为大写
 * @param {number} [data.direction] 操作命令：0-上，1-下，2-左，3-右，4-左上，5-左下，6-右上，7-右下，8-放大，9-缩小，10-近焦距，11-远焦距，16-自动控制
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.speed] 速度：0-慢，1-适中，2-快，海康设备参数不可为0
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<boolean>}
 */
export function projectVideoMonitorDevicePtz(data, config) {
  return post("/projectVideoMonitor/devicePtz", data, config);
}

/**
 * 视频监控控制器 / 视频监控控制器设备抓拍图片
 * @param {object} data
 * @param {string} [data.accessToken] access_token
 * @param {number} [data.channelNo] 通道号
 * @param {string} [data.deviceSerial] 设备序列号,存在英文字母的设备序列号，字母需为大写
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectEquipmentTotalVO页面展示实体>}
 */
export function projectVideoMonitorEquipmentCapture(data, config) {
  return post("/projectVideoMonitor/equipmentCapture", data, config);
}

/**
 * 视频监控控制器 / 视频监控控制器视频概况设备统计
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectVideoStatisticsTotalVO页面展示实体>}
 */
export function projectVideoMonitorEquipmentStatistics(config) {
  return get("/projectVideoMonitor/equipmentStatistics", config);
}

/**
 * 视频监控控制器 / 视频监控控制器分页查询项目规划
 * @param {object} data
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {array<number>} [data.projectIdList] 前端勿传，后端用
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {string} [data.projectType] 工程类型
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.status] 在线状态
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProjectVideoPageVO页面展示实体>>}
 */
export function projectVideoMonitorPage(data, config) {
  return post("/projectVideoMonitor/page", data, config);
}

/**
 * 视频监控控制器 / 视频监控控制器分页查询指定项目的设备列表
 * @param {object} data
 * @param {string} [data.equipmentName] 设备名称
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {number} [data.projectId] 项目ID
 * @param {number} [data.start] 查询记录起始下标
 * @param {string} [data.status] 在线状态 1在线 2离线
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProjectEquipmentPageVO页面展示实体>>}
 */
export function projectVideoMonitorProjectQuipment(data, config) {
  return post("/projectVideoMonitor/project/quipment", data, config);
}

/**
 * 视频监控控制器 / 视频监控控制器查询指定项目的设备数量
 * @param {object} data
 * @param {number} [data.projectId] 项目ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectEquipmentTotalVO页面展示实体>}
 */
export function projectVideoMonitorProjectQuipmentTotal(data, config) {
  return post("/projectVideoMonitor/project/quipment/total", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} ProjectEquipmentPageVO页面展示实体 ProjectEquipmentPageVO展示实体
 * @property {string} accessToken 应用token
 * @property {string} address 设备地址
 * @property {number} channelNumber 通道号
 * @property {string} equipmentName 设备名称
 * @property {string} equipmentNumber 设备编号
 * @property {string} equipmentType 设备类型
 * @property {number} id 主键id
 * @property {string} serialNumber 设备序列号
 * @property {string} status 设备状态
 * @description ProjectEquipmentPageVO展示实体
 */

/**
 * @typedef {object} ProjectEquipmentTotalVO页面展示实体 ProjectEquipmentTotalVO展示实体
 * @property {string} picUrl 设备抓拍图片
 * @property {string} picUrlBase64 设备抓拍图片转码
 * @description ProjectEquipmentTotalVO展示实体
 */

/**
 * @typedef {object} ProjectVideoPageVO页面展示实体 ProjectVideoPageVO页面展示实体
 * @property {number} ballMachineNum 球机数量
 * @property {number} gunMachineNum 枪机数量
 * @property {number} id 项目ID
 * @property {string} imageUrl 项目下的视频监控截图
 * @property {number} onlineNum 在线设备数量
 * @property {string} projectName 项目名称
 * @property {string} projectNumber 项目编号
 * @property {number} totalNum 设备总数量
 * @description ProjectVideoPageVO页面展示实体
 */

/**
 * @typedef {object} ProjectVideoStatisticsTotalVO页面展示实体 ProjectVideoStatisticsTotalVO页面展示实体
 * @property {number} ballMachineOfflineTotal 球机离线总和
 * @property {number} ballMachineOnlineTotal 球机在线总和
 * @property {number} gunMachineOfflineTotal 枪机离线总和
 * @property {number} gunMachineOnlineTotal 枪机在线总和
 * @property {number} totalEquipment 设备总和
 * @description ProjectVideoStatisticsTotalVO页面展示实体
 */
